﻿#include"aaa.h"
// 音乐开关
bool Switch = true;
// 音乐播放情况
bool music = false;
bool lasttime_p = false;
bool lasttime_m = false;
int money = 100;
int Sound[10];

//游戏进程提示汇总：
//子弹装填
char arr1[] = "子弹装填!";
//发放道具：
char arr2[] = "道具发放。";
//玩家坐庄：
char arr3[] = "轮到你了。";
//玩家使用刀：
char arr4[] = "你已使用  刀  本次开火实弹伤害+1！";
//玩家在同一次开火中再次使用刀：
char arr5[] = "你无法使用该道具。";
//玩家使用酒：
char arr6_1[] = "你已使用  啤酒  卸掉一发空弹！";
char arr6_2[] = "你已使用  啤酒  卸掉一发实弹！";
//玩家使用烟：
char arr7[] = "你已使用  香烟  回复一点血！";
//玩家使用手铐：
char arr8[] = "你已使用  手铐  对家行动受限一回合！";
//玩家在一个回合中再次使用手铐：
char arr9[] = "你无法使用该道具。";
//玩家使用放大镜：
char arr10_1[] = "你已使用  放大镜  这一发子弹为：空弹！";
char arr10_2[] = "你已使用  放大镜  这一发子弹为：实弹！";
//玩家开火：
char arr11_1[] = "你已开火！本发子弹为实弹，对 自己 造成1点伤害！";
char arr11_2[] = "你已开火！本发子弹为实弹，对 自己 造成2点伤害！";
char arr11_3[] = "你已开火！本发子弹为实弹，对 对家 造成1点伤害！";
char arr11_4[] = "你已开火！本发子弹为实弹，对 对家 造成2点伤害！";
char arr11_5[] = "你已开火！本发子弹为空弹，对 自己 造成0点伤害！";
char arr11_6[] = "你已开火！本发子弹为空弹，对 对家 造成0点伤害！";

//ai坐庄：
char arr12[] = "轮到对家。";
//ai使用刀：
char arr13[] = "对家使用  刀  本次开火实弹伤害+1！";
//ai使用酒：
char arr14[] = "对家使用  啤酒  卸掉一发实弹（空弹）！";
//ai使用烟：
char arr15[] = "对家使用  香烟  回复一点血！";
//ai使用手铐：
char arr16[] = "对家使用  手铐  你行动受限一回合！";
//ai使用放大镜：
char arr17[] = "对家使用  放大镜  窥探到本发子弹的虚实！";
//ai开火：
char arr18[] = "对家开火！本发子弹为实弹（空弹），对他（你）造成0/1/2点伤害！";



//  LL已修改
void Initstack(bustack* b)//初始时建立弹夹与回合结束后下一局新建弹夹。
{
	srand(time(NULL));
	b->top = -1;
	++rounds;
	PrintfRounds();
	// 差距过大重新装弹
	while (1)
	{
		// 3~8发子弹
		int i;
		if (game_level == 1)
			i = rand() % 3 + 3;
		else if (game_level == 2)
			i = rand() % 5 + 4;
		else
			i = rand() % 4 + 5;
		red_bullet = black_bullet = 0;
		while (i--) {
			if (rand() % 2 == 0) {
				STPush(&s, 0);
				black_bullet++;
				// 随机睡眠避免重复
				Sleep(rand() % 100);
			}
			else {
				STPush(&s, 1);
				red_bullet++;
				// 随机睡眠避免重复
				Sleep(rand() % 100);
			}
		}
		// 相差不能超过2，并且每种子弹都有最少1颗
		if (black_bullet <= red_bullet + 2 &&
			red_bullet <= black_bullet + 2 &&
			black_bullet > 0 && red_bullet > 0)
			break;
		else
			// 清空弹夹，重新装弹
			while (!STEmpty(&s))
			{
				STPop(&s);
			}
	}
	char arrarr1[5];
	char arrarr2[5];
	char arrarr5[5];
	_stprintf_s(arrarr1, "%d", red_bullet);
	_stprintf_s(arrarr2, "%d", black_bullet);
	_stprintf_s(arrarr5, "%d", 2 * game_level - 2);
	settextcolor(RED);
	settextstyle(20, 0, "楷体");
	outtextxy(550, 450, "实弹：");
	outtextxy(600, 450, arrarr1);
	settextcolor(BLUE);
	outtextxy(550, 470, "空弹：");
	outtextxy(600, 470, arrarr2);
	settextcolor(WHITE);
	outtextxy(400, 500, "每回合分发的道具数量：");
	outtextxy(620, 500, arrarr5);
	Sleep(4000);
}

int getLength(bustack s) {
	return (s.top) + 1;
}

int clearstack(bustack* s) {
	s->top = -1;
	return true;
}

int Push(bustack* s, Elemtype e)
{
	if (s->top == (bullet_cap - 1))  return false;
	s->data[++(s->top)] = e;

	return true;
}

int Pop(bustack* s, Elemtype* e)
{
	if (s->top == -1)  return false;
	*e = s->data[s->top--];
	return true;
}

int getTop(bustack s, Elemtype* e)//只看不出栈
{
	if (s.top == -1) return false;
	*e = s.data[s.top];
	return *e;
}

double c = 0.0f;
int useknife = 0, usehandcuffs = 0, use = 0;
void AI_property() {
	Close_The_Sound();
	banker = 1;//坐庄人变量，玩家为1、ai为0
	c = Probability();
	int b = 0;
	useknife = 0;
	usehandcuffs = 0;//使用刀和使用手铐的标志数
	fang_da = 0;
	while (game_level != 1)
	{
		b = AI_operate();
		Close_The_Sound();//调用函数，判断使用道具
		if (use == 0)
		{
			Sleep(1000);
			break;
		}
	}
	int zi_dan = STTop(&s);//假设1是红，0是黑,拿子弹，并退栈
	STPop(&s);
	int a;
	if (c > 0.4999)
	{
		if (b == 2 || b == 4) {											//用了刀
			if (zi_dan == 1) {
				// 播放对面向玩家开火并中弹的动画
				MSPW();
				char message[] = "对家开火！本发子弹为实弹，对你造成2点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Player_health -= 2;
			}
			else {
				MSPF();
				char message[] = "对家开火！本发子弹为虚弹，对你造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
			}
			if (b == 3 || b == 4)
				banker = 0, lasttime_m = true;
			else
				lasttime_m = false;
			print_GameInterface();
			return;
		}
		else {									//用了手铐
			if (zi_dan == 1) {//红子弹
				// 播放对面向玩家开火并中弹的动画
				MSPW();
				char message[] = "对家开火！本发子弹为实弹，对你造成1点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Player_health -= 1;
			}
			else {
				MSPF();
				char message[] = "对家开火！本发子弹为虚弹，对你造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
			}
			if (b == 3 || b == 4)
				banker = 0, lasttime_m = true;
			else
				lasttime_m = false;
			print_GameInterface();
			return;
		}
	}
	else
	{
		if (b == 2 || b == 4)
		{
			if (zi_dan == 1) {
				// 播放对面向自己开枪并中弹的动画
				MSMW();
				char message[] = "对家开火！本发子弹为实弹，对自己造成2点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Machine_health -= 2;
			}
			else {
				MSMF();
				char message[] = "对家开火！本发子弹为虚弹，对自己造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
				banker = 0;
			}
			if (b == 3 || b == 4)
				banker = 0, lasttime_m = true;
			else
				lasttime_m = false;
			print_GameInterface();
			return;
		}
		else {
			if (zi_dan == 1) {
				// 播放对面向自己开枪并中弹的动画
				MSMW();
				char message[] = "对家开火！本发子弹为实弹，对自己造成1点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Machine_health--;
			}
			else {
				MSMF();
				char message[] = "对家开火！本发子弹为虚弹，对自己造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
				banker = 0;
			}
			print_GameInterface();
			return;
		}
	}
}

double Probability() {;
	return (double)red_bullet / (black_bullet + red_bullet) * 1.0;
}


int  AI_operate() {			//抽烟
	srand(time(NULL));	//通过获取当前时间作为生成随机数的种子，保证每次生成的随机数不一样
	use = 0;

	//ai使用刀：
	char arr13[] = "对家使用  刀  本次开火实弹伤害+1！";
	//ai使用酒：
	char arr14_1[] = "对家使用  啤酒  卸掉一发实弹！";
	char arr14_2[] = "对家使用  啤酒  卸掉一发空弹！";
	//ai使用烟：
	char arr15[] = "对家使用  香烟  回复一点血！";
	//ai使用手铐：
	char arr16[] = "对家使用  手铐  你行动受限一回合！";
	//ai使用放大镜：
	char arr17[] = "对家使用  放大镜  窥探到本发子弹的虚实！";


	//烟
	while (Machine_health < 2 * game_level) {
		for (int i = 0; i < 8; i++) {
			if (Machine_item[i] == 2) {
				PlaySoundEffect(2);
				Machine_item[i] = 0;//烟减一

				Machine_health += 1;//生命加一
				use = 1;
				print_GameInterface();
				messagerefresh(arr15);//更新信息
				Sleep(2000);
				break;
			}
		}
		break;
	}
	//放大镜
	if (red_bullet && black_bullet && fang_da == 0) {

		for (int i = 0; i < 8; i++) {
			if (Machine_item[i] == 5) {
				PlaySoundEffect(5);
				Machine_item[i] = 0;	//放大镜减一

				ai_Using_magnifying_glass();//调用ai使用放大镜动画

				fang_da = 1;
				if (STTop(&s)) {			//调用栈顶元素
					c = 1.0;
				}
				else {
					c = 0.0;
				}
				use = 1;
				print_GameInterface();
				messagerefresh(arr17);//更新信息
				Sleep(2000);
				break;
			}
		}
	}
	//手铐
	if (usehandcuffs == 0 && lasttime_m == false)
	{
		if (black_bullet + red_bullet >= 2 && c >= 0.5) {
			for (int i = 0; i < 8; i++) {
				if (Machine_item[i] == 3) {
					PlaySoundEffect(3);
					Machine_item[i] = 0;//手铐减一

					usehandcuffs = 1;//标记使用了手铐
					use = 1;
					print_GameInterface();
					messagerefresh(arr16);//更新信息
					Sleep(2000);
					break;
				}
			}
		}
	}
	//酒
	if ((black_bullet + red_bullet >= 2) && (red_bullet > 0) && (black_bullet > red_bullet) && (c != 1)) {
		for (int i = 0; i < 8; i++) {
			if (Machine_item[i] == 4) {
				PlaySoundEffect(4);
				Machine_item[i] = 0;//酒减一

				int p;//用于访问栈顶元素的指针

				//bool leave = 
				if (STTop(&s))
					--red_bullet;
				else
					--black_bullet;
				STPop(&s);//弹栈
				use = 1;
				c = Probability();
				//if (leave == true) {//更新信息
				//	print_GameInterface();
				//	messagerefresh(arr14_1);
				//}
				//else if (leave == false) {
				//	print_GameInterface();
				//	messagerefresh(arr14_2);
				//}
				Sleep(2000);
				break;
			}
		}
	}

	//刀
	if (useknife == 0)
	{
		if (c >= 0.6) {

			for (int i = 0; i < 8; i++) {
				if (Machine_item[i] == 1) {
					PlaySoundEffect(1);
					Machine_item[i] = 0;//刀减一

					ai_UsingAKnifeCG();//刀动画

					useknife = 1;//标记使用了刀
					use = 1;
					print_GameInterface();
					messagerefresh(arr13);//更新信息
					Sleep(2000);
					break;
				}
			}
		}
	}
	

	if (useknife == 1 && usehandcuffs == 1) {
		return 4;
	}
	else if (usehandcuffs == 1) {
		return 3;
	}
	else if (useknife == 1) {
		return 2;
	}
	else {
		return 1;
	}
}

//------------------------------------------------------------			阿齐			--------------------------------------------------------------

// LL已修改
void init()
{
	Player_health = Machine_health = 2 * game_level;
	for (int i = 0; i < item_cap; ++i)
		player_item[i] = Machine_item[i] = 0;
	// 清空弹夹，重新装弹
	while (!STEmpty(&s))
	{
		STPop(&s);
	}
	red_bullet = black_bullet = 0;
}

//音乐开关按钮
void MusicSwitch()
{
	Switch = !Switch;
}

//菜单音乐
void MenuMusic(bool m)
{
	static int open1 = 0;
	if (0 == open1)
	{
		mciSendString("open game.mp3 alias menu", NULL, 0, NULL);
		open1 = 1;
	}
	static int music1 = 0;
	if (0 == music1 && Switch == true)
	{
		mciSendString("play menu repeat", NULL, 0, NULL);
		music1 = 1;
	}
	//...//
	if (m == true && music == false && Switch == true)
	{
		mciSendString("resume menu", NULL, 0, NULL);
		music = true;
	}
	else if (m == false && music == true)
	{
		mciSendString("pause menu", NULL, 0, NULL);
		music = false;
	}
}

//游戏音乐
void GameMusic(bool m)
{
	static int open2 = 0;
	if (0 == open2)
	{
		mciSendString("open ./game.mp3 alias game", NULL, 0, NULL);
		open2 = 1;
	}
	static int music2 = 0;
	if (0 == music2 && Switch == true)
	{
		mciSendString("play game repeat", NULL, 0, NULL);
		music2 = 1;
	}
	//...//
	if (m == true && music == false && Switch == true)
	{
		mciSendString("resume game", NULL, 0, NULL);
		music = true;
	}
	else if (m == false && music == true)
	{
		mciSendString("pause game", NULL, 0, NULL);
		music = false;
	}
}

//胜利音乐
void WinMusic(bool m)
{
	static int open3 = 0;
	if (0 == open3)
	{
		mciSendString("open ./win.mp3 alias win", NULL, 0, NULL);
		open3 = 3;
	}
	static int music3 = 0;
	if (0 == music3 && Switch == true)
	{
		mciSendString("play win repeat", NULL, 0, NULL);
		music3 = 1;
	}
	//...//
	if (m == true && music == false && Switch == true)
	{
		mciSendString("resume win", NULL, 0, NULL);
		music = true;
	}
	else if (m == false && music == true)
	{
		mciSendString("pause win", NULL, 0, NULL);
		music = false;
	}
}

//失败音乐
void LoseMusic(bool m)
{
	static int open4 = 0;
	if (0 == open4)
	{
		mciSendString("open ./lose.mp3 alias lose", NULL, 0, NULL);
		open4 = 1;
	}
	static int music4 = 0;
	if (0 == music4 && Switch == true)
	{
		mciSendString("play lose repeat", NULL, 0, NULL);
		music4 = 1;
	}
	//...//
	if (m == true && music == false && Switch == true)
	{
		mciSendString("resume lose", NULL, 0, NULL);
		music = true;
	}
	else if (m == false && music == true)
	{
		mciSendString("pause lose", NULL, 0, NULL);
		music = false;
	}
}


void EnterDeathInterface()//死亡页面	xwx
{
	BeginBatchDraw();
	IMAGE img_lose;
	loadimage(&img_lose, "排行榜.png", 1024, 768);
	LoseMusic(true);	//播放失败音乐
	putimage(0, 0, &img_lose);

	//打印失败提示文字
	settextcolor(RED);//设置文字颜色
	settextstyle(120, 0, "楷体");//设置字体
	setbkmode(TRANSPARENT);//文字背景透明
	outtextxy(512 - (textwidth("你失败了!") / 2), 80, "你失败了!");// 文字

	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 7); // 设置边框线条样式		
	settextstyle(40, 0, "楷体");//设置字体
	settextcolor(BLACK);//设置文字颜色
	setcolor(LIGHTGRAY); // 设置线条颜色	

	//打印选项重新开始
	outtextxy(262 - (textwidth("重新开始") / 2), 640, _T("重新开始")); // 文字	
	rectangle(162, 620, 362, 700);// 绘制矩形边框	

	//打印选项返回菜单
	outtextxy(774 - (textwidth("返回菜单") / 2), 640, _T("返回菜单"));// 文字
	rectangle(674, 620, 874, 700);// 绘制矩形边框

	EndBatchDraw();

	ExMessage msg;
	while (true)
	{
		if (peekmessage(&msg, EX_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)//左键按下
			{
				if (msg.x > 162 && msg.x < 362 && msg.y>620 && msg.y < 700)
				{//重新开始
					picture = 4;//更改main函数循环变量
					LoseMusic(false);//关闭音乐
					graphdefaults();//重置绘制格式
					break;

				}
				else if (msg.x > 674 && msg.x < 874 && msg.y>620 && msg.y < 700)
				{//返回菜单
					picture = 1;//更改main函数循环变量
					LoseMusic(false);//关闭音乐
					money /= 2;
					//w_ranking_list(money);
					graphdefaults();//重置绘制格式
					break;

				}
			}
		}
	}
}

void EnterDeathInterface_plus()//噩梦模式	死亡页面	xwx
{
	BeginBatchDraw();
	IMAGE img_lose;
	loadimage(&img_lose, "排行榜.png", 1024, 768);
	LoseMusic(true);	//播放失败音乐
	putimage(0, 0, &img_lose);

	//打印失败提示文字
	settextcolor(RED);//设置文字颜色
	settextstyle(120, 0, "楷体");//设置字体
	setbkmode(TRANSPARENT);//文字背景透明
	outtextxy(512 - (textwidth("你失败了!") / 2), 80, "你失败了!");// 文字

	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 7); // 设置边框线条样式		
	settextstyle(40, 0, "楷体");//设置字体
	settextcolor(BLACK);//设置文字颜色
	setcolor(LIGHTGRAY); // 设置线条颜色	

	//打印选项重新开始
	outtextxy(262 - (textwidth("重新开始") / 2), 640, _T("重新开始")); // 文字	
	rectangle(162, 620, 362, 700);// 绘制矩形边框	

	//打印选项返回菜单
	outtextxy(774 - (textwidth("返回菜单") / 2), 640, _T("返回菜单"));// 文字
	rectangle(674, 620, 874, 700);// 绘制矩形边框

	EndBatchDraw();

	ExMessage msg;
	while (true)
	{
		if (peekmessage(&msg, EX_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)//左键按下
			{
				if (msg.x > 162 && msg.x < 362 && msg.y>620 && msg.y < 700)
				{//重新开始
					picture = 8;//更改main函数循环变量
					LoseMusic(false);//关闭音乐

					//graphdefaults();//重置绘制格式
					break;

				}
				else if (msg.x > 674 && msg.x < 874 && msg.y>620 && msg.y < 700)
				{//返回菜单
					picture = 1;//更改main函数循环变量
					LoseMusic(false);//关闭音乐
					money /= 2;
					//w_ranking_list(money);
					graphdefaults();//重置绘制格式
					break;

				}
			}
		}
	}
}

void EnterVictoryInterface()//胜利页面		xwx
{
	BeginBatchDraw();
	IMAGE img_win;
	loadimage(&img_win, "排行榜.png", 1024, 768);
	WinMusic(true);		//播放胜利音乐 
	putimage(0, 0, &img_win);

	//打印胜利提示文字
	settextcolor(RED);//设置文字颜
	settextstyle(120, 0, "楷体");//设置字体
	setbkmode(TRANSPARENT);//文字背景透明
	outtextxy(512 - (textwidth("你赢了！") / 2), 80, "你赢了！");// 文字

	setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 7); // 设置边框线条样式		
	settextstyle(40, 0, "楷体");//设置字体
	settextcolor(BLACK);//设置文字颜色
	setcolor(LIGHTGRAY); // 设置线条颜色	

	//打印选项再来一局
	outtextxy(262 - (textwidth("继续搞事") / 2), 640, _T("继续搞事")); // 文字
	rectangle(162, 620, 362, 700);// 绘制矩形边框	

	//打印选项返回菜单
	outtextxy(774 - (textwidth("放弃") / 2), 640, _T("放弃"));// 文字
	rectangle(674, 620, 874, 700);// 绘制矩形边框
	//打印赌金
	char Money[15]; // 存储格式化后的字符串
	settextcolor(WHITE);//设置文字颜色
	settextstyle(40, 0, "楷体");//设置字体
	setbkmode(TRANSPARENT);//文字背景透明
	sprintf(Money, "%d", money);//将整数变量 money 格式化为字符串 Money
	outtextxy(570 - (textwidth(Money) / 2), 400, Money);// 文字
	outtextxy(350, 400, "当前赌金：");

	settextstyle(25, 0, "楷体");//设置字体
	outtextxy(350, 480, "选择继续搞事来增加赌金！");
	outtextxy(350, 530, "选择放弃拿走你的赌金！");
	EndBatchDraw();


	ExMessage msg;
	while (true)
	{
		if (peekmessage(&msg, EX_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)//左键按下
			{
				if (msg.x > 162 && msg.x < 362 && msg.y>620 && msg.y < 700)
				{//再来一局
					picture = 4;//更改main函数循环变量
					WinMusic(false);//关闭音乐
					money *= 1.5;
					graphdefaults();//重置绘制格式
					break;

				}
				else if (msg.x > 674 && msg.x < 874 && msg.y>620 && msg.y < 700)
				{//返回菜单
					picture = 1;//更改main函数循环变量
					WinMusic(false);//关闭音乐
					w_ranking_list(money);
					graphdefaults();//重置绘制格式
					break;

				}
			}
		}
	}
}



//------------------------------------------------------------			XWX		--------------------------------------------------------------
void PSMW()
{
	BeginBatchDraw();
	int n = 72; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 37)
			PlaySoundEffect(8);
		string filepath = "./向对面开枪并中弹/向对面开枪并中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void PSMF()
{
	BeginBatchDraw();
	int n = 83; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 33)
			PlaySoundEffect(6);
		string filepath = "./向对面开枪并没中弹/向对面开枪并没中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void MSPW()
{
	BeginBatchDraw();
	int n = 73; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 39)
			PlaySoundEffect(7);
		string filepath = "./对面向我开枪并中弹/对面向我开枪并中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void MSPF()
{
	BeginBatchDraw();
	int n = 119; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 66)
			PlaySoundEffect(6);
		string filepath = "./对面向我开枪并没中弹/对面向我开枪并没中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void PSPW()
{
	BeginBatchDraw();
	int n = 74; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 39)
			PlaySoundEffect(7);
		string filepath = "./向自己开枪并中弹/向自己开枪并中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void PSPF()
{
	BeginBatchDraw();
	int n = 89; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 36)
			PlaySoundEffect(6);
		string filepath = "./向自己开枪并没中弹/向自己开枪并没中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void MSMW()
{
	BeginBatchDraw();
	int n = 70; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 39)
			PlaySoundEffect(8);
		string filepath = "./对面向自己开枪并中弹/对面向自己开枪并中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void MSMF()
{
	BeginBatchDraw();
	int n = 110; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		if (i == 63)
			PlaySoundEffect(6);
		string filepath = "./对面向自己开枪并没中弹/对面向自己开枪并没中弹 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void player_fightedCG_AI()//展示玩家射中ai动画
{
	BeginBatchDraw();
	int n = 74; //图片数
	for (int i = 1; i <= n; i++) {
		IMAGE img_bk;
		cleardevice();
		string filepath = "./1/1 (" + to_string(i) + ").png"; // 构建文件路径字符串
		loadimage(&img_bk, filepath.c_str(), 1024, 768);
		putimage(0, 0, &img_bk);
		FlushBatchDraw();
		Sleep(66);//1000/16帧
	}
	EndBatchDraw();
}

void player_fightedCG_player()//展示玩家射中自己动画
{
	IMAGE img_bk1;
	loadimage(&img_bk1, "玩家射中自己背景done.png", 1024, 768);
	putimage(0, 0, &img_bk1);
	Sleep(1000);
	IMAGE img_bk2;
	loadimage(&img_bk2, "黑屏.png", 1024, 768);
	putimage(0, 0, &img_bk2);
	Sleep(1000);
}

void ai_UsingAKnifeCG()//展示ai用刀动画
{
	IMAGE img_bk;
	loadimage(&img_bk, "ai用刀背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void player_UsingAKnifeCG()//展示玩家用刀动画
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家用刀背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void ai_UseHandcuffsCG()//展示ai用手铐动画（ai对玩家使用）
{
	IMAGE img_bk;
	loadimage(&img_bk, "ai对玩家使用手铐.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void player_UseHandcuffsCG()//展示玩家用手铐动画（玩家对ai使用）
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家对ai使用手铐.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void ai_SmokeCG()//展示ai抽烟动画
{
	IMAGE img_bk;
	loadimage(&img_bk, "ai抽烟.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void player_SmokeCG()//展示玩家抽烟动画
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家抽烟背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

void print_GameTipsInterface() {
	IMAGE img;
	loadimage(&img, "tips.png", 1024, 768);
	putimage(0, 0, &img);
	//settextstyle(40, 0, "楷体");//设置字体
	//settextcolor(RED);//设置文字颜色
	//outtextxy(300, 200,"你玩了就知道了"); // 文字
	//setfillcolor(BLACK);
	//settextcolor(WHITE);
	//fillrectangle(875, 620, 966, 678);
	//outtextxy(882, 630, "返回");
	MOUSEMSG m;
	while (1)
	{
		if (MouseHit())
		{
			MOUSEMSG msg = GetMouseMsg();
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				if (msg.x > 875 && msg.x < 966 && msg.y > 650 && msg.y < 720)
				{
					picture = 1;
					return;
				}
				break;
			}
		}
	}
}
//------------------------------------------------------------			磊哥			--------------------------------------------------------------




//打印游戏页面
void print_GameInterface() {
	cleardevice();
	BeginBatchDraw();

	IMAGE bk;
	loadimage(&bk, "game.png", 1024, 768);
	putimage(0, 0, &bk);
	FlushBatchDraw();

	print_hp();
	FlushBatchDraw();

	//print_bullet();
	//FlushBatchDraw();

	print_item();
	FlushBatchDraw();

	print_fire();
	FlushBatchDraw();
	EndBatchDraw();
}


//更新信息---根据开火函数中数值变化重绘游戏页面
void messagerefresh(char arr[]) {
	//更新信息

	setbkmode(TRANSPARENT);
	settextcolor(WHITE);
	settextstyle(20, 0, "楷体");
	//if (n < 5) {
	//	outtextxy(0, 280 + n * 15, arr);
	//	n++;
	//}
	//else {
	//	//重绘游戏界面
	//	print_GameInterface();
	//	n = 0;
	//	outtextxy(0, 280, arr);
	//}
	outtextxy(0, 280, arr);
}

//绘制血量：每次掉血都绘制
void print_hp() {
	IMAGE hp;
	loadimage(&hp, "./hp.png");
	//绘制玩家血量
	for (int i = 0; i < Player_health; i++) {
		putimage(420 + 30 * i, 550, &hp);
	}
	//绘制ai血量
	for (int i = 0; i < Machine_health; i++) {
		putimage(420 + 30 * i, 150, &hp);
	}
}


//绘制子弹：开火后绘制
void print_bullet() {
	IMAGE bullet;

	settextstyle(20, 0, "楷体");
	outtextxy(750, 340, "实弹：？");
	outtextxy(750, 380, "空弹：？");
	//for (int i = 1; i <= red_bullet; i++) {
	//	setfillcolor(RED);
	//	solidrectangle(617 + i * 15, 180, 627 + i * 15, 195);
	//	//putimage(x + 间隔 * i, y, &bullet);
	//}
	//for (int i = 1; i <= black_bullet; i++) {
	//	setfillcolor(BLACK);
	//	solidrectangle(617 + i * 15, 200, 627 + i * 15, 210);
	//	//putimage(617 + 15 * i, 200, &bullet);
	//}
}

//绘制装弹
void print_pushbullet() {
	IMAGE bullet;
	//loadimage(&bullet, 路径);
	//for (int i = 1; i <= red_bullet + black_bullet; i++) {
	//	putimage(x + 间隔 * i, y, &bullet);
	//	//卡点装弹音效
	//	//装弹音效函数;
	//	Sleep(1000);
	//}
	for (int i = 1; i <= red_bullet; i++) {
		setfillcolor(RED);
		solidrectangle(617 + i * 15, 180, 627 + i * 15, 195);
		Sleep(1000);
		//putimage(x + 间隔 * i, y, &bullet);
	}
	for (int i = 1; i <= black_bullet; i++) {
		setfillcolor(BLACK);
		solidrectangle(617 + i * 15, 200, 627 + i * 15, 210);
		Sleep(1000);
		//putimage(617 + 15 * i, 200, &bullet);
	}
}

//绘制道具：每次使用道具时绘制
//道具栏参数：ai
//solidrectangle(0, 0, 110, 129);
//solidrectangle(110, 0, 110, 129);
//solidrectangle(220, 0, 110, 129);
//solidrectangle(330, 0, 110, 129);
//solidrectangle(440, 0, 110, 129);
//solidrectangle(550, 0, 110, 129);
//solidrectangle(660, 0, 110, 129);
//solidrectangle(770, 0, 110, 129);
//player
//solidrectangle(0, 591, 110, 720);
//solidrectangle(110, 591, 220, 720);
//solidrectangle(220, 591, 330, 720);
//solidrectangle(330, 591, 440, 720);
//solidrectangle(440, 591, 550, 720);
//solidrectangle(550, 591, 660, 720);
//solidrectangle(660, 591, 770, 720);
//solidrectangle(770, 591, 880, 720);
void print_item() {
	IMAGE item_1;
	IMAGE item_2;
	IMAGE item_3;
	IMAGE item_4;
	IMAGE item_5;
	loadimage(&item_1, "./knife.png", 90, 140);
	loadimage(&item_2, "./cigarette.png", 90, 140);
	loadimage(&item_3, "./handcaff.png", 90, 140);
	loadimage(&item_4, "./beer.png", 90, 140);
	loadimage(&item_5, "./fangda.png", 90, 140);
	//绘制玩家道具
	for (int i = 0; i < 4; i++) {
		switch (player_item[i]) {
		case 0:
			break;
		case 1:
			putimage(0 + 110 * i, 580, &item_1);
			break;
		case 2:
			putimage(0 + 110 * i, 580, &item_2);
			break;
		case 3:
			putimage(0 + 110 * i, 580, &item_3);
			break;
		case 4:
			putimage(0 + 110 * i, 580, &item_4);
			break;
		case 5:
			putimage(0 + 110 * i, 580, &item_5);
			break;
		default:
			break;
		}
	}
	//绘制玩家道具
	for (int i = 4; i < 8; i++) {
		switch (player_item[i]) {
		case 0:
			break;
		case 1:
			putimage(164 + 110 * i, 580, &item_1);
			break;
		case 2:
			putimage(164 + 110 * i, 580, &item_2);
			break;
		case 3:
			putimage(164 + 110 * i, 580, &item_3);
			break;
		case 4:
			putimage(164 + 110 * i, 580, &item_4);
			break;
		case 5:
			putimage(164 + 110 * i, 580, &item_5);
			break;
		default:
			break;
		}
	}
	//绘制ai道具
	for (int i = 0; i < 4; i++) {
		switch (Machine_item[i]) {
		case 0:
			break;
		case 1:
			putimage(0 + 110 * i, 30, &item_1);
			break;
		case 2:
			putimage(0 + 110 * i, 30, &item_2);
			break;
		case 3:
			putimage(0 + 110 * i, 30, &item_3);
			break;
		case 4:
			putimage(0 + 110 * i, 30, &item_4);
			break;
		case 5:
			putimage(0 + 110 * i, 30, &item_5);
			break;
		default:
			break;
		}
	}
	//绘制ai道具
	for (int i = 4; i < 8; i++) {
		switch (Machine_item[i]) {
		case 0:
			break;
		case 1:
			putimage(164 + 110 * i, 30, &item_1);
			break;
		case 2:
			putimage(164 + 110 * i, 30, &item_2);
			break;
		case 3:
			putimage(164 + 110 * i, 30, &item_3);
			break;
		case 4:
			putimage(164 + 110 * i, 30, &item_4);
			break;
		case 5:
			putimage(164 + 110 * i, 30, &item_5);
			break;
		default:
			break;
		}
	}
}

//daixiugai
//绘制开火键
void print_fire() {
	setbkmode(TRANSPARENT);
	fillrectangle(464, 85, 564, 135);
	fillrectangle(464, 630, 564, 690);
	settextstyle(20, 0, "楷体");
	outtextxy(474, 100, "向它开枪");
	outtextxy(464, 650, "向自己开枪");
}

//玩家坐庄  LL已修改
void playershot() {
	// 输出提示：轮到你了
	Close_The_Sound();
	messagerefresh(arr3);
	Sleep(1000);
	banker = 0;
	IsUsed_item1 = false;
	ExMessage msg;
	while (1) {
		// 获取鼠标点击
		if (peekmessage(&msg, EM_MOUSE)) {
			if (msg.message == WM_LBUTTONDOWN) {
				//道具栏0
				if (msg.x >= 0 && msg.x <= 90 && msg.y >= 580 && msg.y <= 720 && player_item[0] != 0) {
					// 使用道具的逻辑
					player_item[0] = UseItem(player_item[0]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏1
				if (msg.x >= 110 && msg.x <= 200 && msg.y >= 580 && msg.y <= 720 && player_item[1] != 0) {
					// 使用道具的逻辑
					player_item[1] = UseItem(player_item[1]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏2
				if (msg.x >= 220 && msg.x <= 310 && msg.y >= 580 && msg.y <= 720 && player_item[2] != 0) {
					// 使用道具的逻辑
					player_item[2] = UseItem(player_item[2]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏3
				if (msg.x >= 330 && msg.x <= 420 && msg.y >= 580 && msg.y <= 720 && player_item[3] != 0) {
					// 使用道具的逻辑
					player_item[3] = UseItem(player_item[3]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏4
				if (msg.x >= 604 && msg.x <= 694 && msg.y >= 580 && msg.y <= 720 && player_item[4] != 0) {
					// 使用道具的逻辑
					player_item[4] = UseItem(player_item[4]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏5
				if (msg.x >= 714 && msg.x <= 804 && msg.y >= 580 && msg.y <= 720 && player_item[5] != 0) {
					// 使用道具的逻辑
					player_item[5] = UseItem(player_item[5]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏6
				if (msg.x >= 824 && msg.x <= 914 && msg.y >= 580 && msg.y <= 720 && player_item[6] != 0) {
					// 使用道具的逻辑
					player_item[6] = UseItem(player_item[6]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				//道具栏7
				if (msg.x >= 934 && msg.x <= 1024 && msg.y >= 580 && msg.y <= 720 && player_item[7] != 0) {
					// 使用道具的逻辑
					player_item[7] = UseItem(player_item[7]);
					Sleep(1000);
					Close_The_Sound();
					// 打印页面
					print_GameInterface();
				}
				if (red_bullet + black_bullet == 0)
					break;
				int n1;
				//向对面开火
				if (msg.x >= 464 && msg.x <= 564 && msg.y >= 85 && msg.y <= 135) {
					// 查看栈顶元素
					if (STTop(&s)) {
						// 播放玩家向对面开火并中弹的动画
						PSMW();
						// 弹栈
						STPop(&s);
						// 对面扣血
						Machine_health -= damage;
						// 实弹减1
						red_bullet -= 1;
						// 如果伤害为1
						if (damage == 1) {
							// 打印页面
							print_GameInterface();
							// 消息栏反馈
							messagerefresh(arr11_3);
							Sleep(1000);
						}
						// 伤害为2
						else {
							// 打印页面
							print_GameInterface();
							// 消息栏反馈
							messagerefresh(arr11_4);
							Sleep(1000);
							// 伤害修正
							damage = 1;
						}
						// 使用过手铐则连续开枪
						if (IsUsed_item3) {
							// 下个回合依然归玩家
							banker = 1;
							// 手铐效果过期
							lasttime_p = true, IsUsed_item3 = false;
						}
						// 换人
						else {
							banker = 0;
							if (lasttime_p)
								lasttime_p = false;
						}
						// 开完枪退出
						IsUsed_item1 = false;
						break;
					}
					// 空弹
					else {
						// 播放玩家向对面开火并没中弹的动画
						PSMF();
						// 空弹减1
						black_bullet -= 1;
						// 弹栈
						STPop(&s);
						// 伤害修正
						damage = 1;
						// 打印
						print_GameInterface();
						// 使用过手铐则连续开枪
						if (IsUsed_item3) {
							// 下个回合依然归玩家
							banker = 1;
							// 手铐效果过期
							lasttime_p = true, IsUsed_item3 = false;
						}
						// 换人
						else {
							banker = 0;
							if (lasttime_p)
								lasttime_p = false;
						}
						IsUsed_item1 = false;
						// 消息栏反馈
						messagerefresh(arr11_6);
						Sleep(1000);
						// 开完枪退出
						break;
					}
				}
				//向自己开火
				if (msg.x >= 464 && msg.x <= 564 && msg.y >= 630 && msg.y <= 690) {
					// 实弹
					if (STTop(&s)) {
						// 播放玩家向自己开火并中弹的动画
						PSPW();
						// 弹栈
						STPop(&s);
						// 扣血
						Player_health -= damage;
						// 打印页面
						print_GameInterface();
						// 实弹减1
						red_bullet -= 1;
						// 打印页面
						print_GameInterface();
						// 如果伤害为1
						if (damage == 1) {
							// 打印页面
							print_GameInterface();
							// 消息栏反馈
							messagerefresh(arr11_1);
							Sleep(1000);
						}
						// 伤害为2
						else {
							// 打印页面
							print_GameInterface();
							// 消息栏反馈
							messagerefresh(arr11_2);
							Sleep(1000);
							// 伤害修正
							damage = 1;
						}
						// 使用过手铐则连续开枪
						if (IsUsed_item3) {
							// 下个回合依然是玩家
							banker = 1;
							// 手铐效果过期
							lasttime_p = true, IsUsed_item3 = false;
						}
						// 换人
						else {
							banker = 0;
							if (lasttime_p)
								lasttime_p = false;
						}
						// 开完枪退出
						break;
					}
					// 空弹
					else {
						// 播放玩家向自己开火并没中弹的动画
						PSPF();
						// 弹栈
						STPop(&s);
						// 空弹减1
						black_bullet -= 1;
						// 伤害修正
						damage = 1;
						// 打印页面
						print_GameInterface();
						// 使用过手铐则连续开枪
						if (IsUsed_item3) {
							// 手铐效果过期
							lasttime_p = true, IsUsed_item3 = false;
						}
						// 空弹射自己下回合依然是自己
						banker = 1;
						// 打印页面
						print_GameInterface();
						// 消息栏反馈
						messagerefresh(arr11_5);
						Sleep(1000);
						// 开完枪退出
						break;
					}
				}
			}
		}
	}
}

//玩家使用道具  LL已修改
int UseItem(int item_sort) {
	int n1;
	switch (item_sort) {
	// 使用了刀
	case 1:
		// 如果本次没有使用过刀
		if (!IsUsed_item1)
			// 改为使用了刀
			IsUsed_item1 = true;
		// 本次已经使用过刀
		else
			// 原路返回
			return item_sort;
		// 修改伤害
		PlaySoundEffect(1);
		damage = 2;
		// 打印页面
		print_GameInterface();
		// 消息栏反馈
		messagerefresh(arr4);
		break;
	// 使用了烟
	case 2:
		// 血未满
		if (Player_health < 2 * game_level) {
			PlaySoundEffect(2);
			// 回血
			Player_health += 1;
			// 打印页面
			print_GameInterface();
			// 消息栏反馈
			messagerefresh(arr7);
		}
		else
			return item_sort;
		break;
	// 使用手铐
	case 3:
		// 没用使用过手铐
		if (!IsUsed_item3 && !lasttime_p) {
			PlaySoundEffect(3);
			// 修改为使用过手铐
			IsUsed_item3 = true;
			// 打印页面
			print_GameInterface();
			// 消息栏反馈
			messagerefresh(arr8);
		}
		// 使用过手铐
		else {
			// 打印页面
			print_GameInterface();
			// 消息栏反馈
			messagerefresh(arr9);
			// 原路返回
			return item_sort;
		}
		break;
	// 使用啤酒
	case 4:
		PlaySoundEffect(4);
		//// 播放玩家喝酒的动画
		//player_drinkingCG();
		//// 弹栈
		//Pop(&Bullet, &n1);
		//// 如果是实弹
		//if (getTop(Bullet, &n1)) {
		//	// 打印页面
		//	print_GameInterface();
		//	// 消息栏反馈
		//	messagerefresh(arr6_1);
		//}
		//// 如果是空弹
		//else {
		//	// 打印页面
		//	print_GameInterface();
		//	// 消息栏反馈
		//	messagerefresh(arr6_2);
		//}
		if (STTop(&s))
			--red_bullet, messagerefresh(arr6_2);
		else
			--black_bullet, messagerefresh(arr6_1);
		STPop(&s);
		break;
	// 使用放大镜
	case 5:
		PlaySoundEffect(5);
		if (STTop(&s)) {
			// 消息栏反馈
			messagerefresh(arr10_2);
		}
		// 如果是空单
		else {
			// 消息栏反馈
			messagerefresh(arr10_1);
		}
		break;
	// 点击了空道具栏
	default:
		// 不操作
		break;
	}
	// 返回无道具
	return 0;
}

void print_TitleInterface() {
	cleardevice();
	IMAGE img_bk;
	//文字格式
	settextcolor(WHITE);
	setbkmode(TRANSPARENT);
	settextstyle(15, 0, "宋体");

	while (1) {

		BeginBatchDraw();
		// 打印背景        
		loadimage(&img_bk, "menu.png", 1024, 768);
		putimage(0, 0, &img_bk);

		// 绘制选项
		// 进入游戏
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(589, 450, 459, 480, 10, 10);//(左，顶，右，底）
		outtextxy(450 + (150 / 2 - textwidth("进入游戏") / 2), 450 + (30 / 2 - textheight("进入游戏") / 2), "进入游戏");

		// 游戏玩法
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(589, 500, 459, 530, 10, 10);
		outtextxy(450 + (150 / 2 - textwidth("游戏玩法") / 2), 500 + (30 / 2 - textheight("游戏玩法") / 2), "游戏玩法");

		// 游戏设置
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(589, 550, 459, 580, 10, 10);
		outtextxy(450 + (150 / 2 - textwidth("游戏设置") / 2), 550 + (30 / 2 - textheight("游戏设置") / 2), "游戏设置");

		// 排行榜
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(589, 600, 459, 630, 10, 10);
		outtextxy(450 + (150 / 2 - textwidth("排行榜") / 2), 600 + (30 / 2 - textheight("排行榜") / 2), "排行榜");

		// 退出游戏
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(589, 650, 459, 680, 10, 10);
		outtextxy(450 + (150 / 2 - textwidth("退出游戏") / 2), 650 + (30 / 2 - textheight("退出游戏") / 2), "退出游戏");

		//噩梦模式
		setfillcolor(RGB(0, 0, 0));
		fillroundrect(20, 730, 150, 760, 10, 10);
		outtextxy(10 + (150 / 2 - textwidth("进入噩梦模式") / 2), 730 + (30 / 2 - textheight("进入噩梦模式") / 2), "进入噩梦模式");

		//通关噩梦模式给的标识
		FILE* file = fopen("1.txt", "r");
			// 读取文件中的数字
			int number;
			fscanf(file, "%d", &number);
			fclose(file);
			// 如果数字不为0，则输出一段话
			if (number != 0) {
				char str[50];
				sprintf(str, "当前通关噩梦难度：%d次", number);
				settextcolor(WHITE); // 设置文本颜色为白色
				settextstyle(30, 0, _T("微软雅黑")); // 设置文本字体大小和样式
				outtextxy(80, 100, str); // 在指定位置输出文本
			}



		EndBatchDraw();

		// 处理鼠标点击事件
		ExMessage msg;
		if (peekmessage(&msg, EX_MOUSE)) {
			if (msg.message == WM_LBUTTONDOWN) {
				int x = msg.x;
				int y = msg.y;
				// 检查鼠标点击位置并执行相应操作
				if (x >= 459 && x <= 589) {
					if (y >= 450 && y <= 480) {
						game_level = 1;
						rounds = 0;
						// 进入游戏选项
						picture = 4;
						return;

					}
					else if (y >= 500 && y <= 530) {
						// 游戏玩法选项
						picture = 3;
						return;

					}
					else if (y >= 550 && y <= 580) {
						// 游戏设置选项
						picture = 2;
						return;

					}
					else if (y >= 600 && y <= 630) {
						// 排行榜选项
						picture = 7;
						return;

					}
					else if (y >= 650 && y <= 680) {
						// 退出游戏选项                    
						exit(0); // 退出循环

					}
				}
				if (x >= 20 && x <= 150) {
					if (y >= 730 && y <= 760) {
						//进入噩梦模式
						game_level = 1;
						rounds = 0;
						picture = 8;
						return;
					}
				}
			}
		}

	}
}

//展示ai喝酒动画
void ai_drinkingCG()
{
	IMAGE img_bk;
	loadimage(&img_bk, "AI喝酒背景.png", 1024, 768);
	putimage(0, 0, &img_bk);

}
//展示玩家喝酒动画	
void player_drinkingCG()
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家喝酒背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//展示ai射击动画,射自己
void ai_fightingCG_AI()
{
	IMAGE img_bk;
	loadimage(&img_bk, "AI射击自己背景doing.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//展示ai射击动画,射玩家
void ai_fightingCG_player()
{
	IMAGE img_bk;
	loadimage(&img_bk, "AI射击玩家背景doing.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//玩家射击ai
void player_fightingCG_AI()
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家射击ai背景doing.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//玩家射击自己
void player_fightingCG_player()
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家射击自己背景doing.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//展示ai射中自己
void ai_fightedCG_AI()
{
	IMAGE img_bk;
	loadimage(&img_bk, "AI射中自己背景done.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//展示ai射中玩家
void ai_fightedCG_player()
{
	IMAGE img_bk;
	loadimage(&img_bk, "AI射中玩家背景done.png", 1024, 768);
	putimage(0, 0, &img_bk);
	Sleep(2500);
	loadimage(&img_bk, "黑屏.png", 1024, 768);
	putimage(0, 0, &img_bk);
	Sleep(1000);
}
//玩家用放大镜
void player_Using_magnifying_glass()
{
	IMAGE img_bk;
	loadimage(&img_bk, "玩家用放大镜背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}
//ai用放大镜
void ai_Using_magnifying_glass()
{
	IMAGE img_bk;
	loadimage(&img_bk, "ai用放大镜背景.png", 1024, 768);
	putimage(0, 0, &img_bk);
}

//void print_SettingInterface()
//{
//	int mouseX = 0;
//	int mouseY = 0;
//	int selectedButton = -1; // 用于跟踪鼠标所在的按钮，默认为-1表示没有按钮被选中
//	//initgraph(800, 600, EX_SHOWCONSOLE);
//	cleardevice();
//	IMAGE img_mm;
//	// 加载图片
//	loadimage(&img_mm, "menu.jpg", 1024, 768);
//	// 输出图片
//	putimage(0, 0, &img_mm);
//	// 第一个按钮坐标
//	int x1_1 = 100;
//	int y1_1 = 200;
//	int x2_1 = 300;
//	int y2_1 = 260;
//
//	// 第二个按钮坐标
//	int x1_2 = 100;
//	int y1_2 = 300;
//	int x2_2 = 300;
//	int y2_2 = 360;
//
//	// 第三个按钮坐标
//	int x1_3 = 100;
//	int y1_3 = 400;
//	int x2_3 = 300;
//	int y2_3 = 460;
//	ExMessage msg = { 0 };
//	while (true) {
//		if (peekmessage(&msg, EX_MOUSE))
//		{
//			if (msg.message == WM_LBUTTONDOWN)
//			{//	左键按下
//				if (msg.x > 100 && msg.x < 300 && msg.y>200 && msg.y < 260)
//				{
//					MusicSwitch();
//					if (Switch == true)
//						MenuMusic(true);
//					else if (Switch == false)
//						MenuMusic(false);
//				}
//				else if (msg.x > 100 && msg.x < 300 && msg.y>300 && msg.y < 360)
//					//DifficultySeeting();
//					;
//				else if (msg.x > 100 && msg.x < 300 && msg.y>400 && msg.y < 460)
//				{
//					//返回菜单
//					picture = 1;
//					return;
//				}
//			}
//			else if (msg.message == WM_MOUSEMOVE)
//			{ // 鼠标移动事件
//					// 检查鼠标是否在按钮上
//				if (msg.x > x1_1 && msg.x < x2_1 && msg.y > y1_1 && msg.y < y2_1)
//					selectedButton = 0;
//				else if (msg.x > x1_3 && msg.x < x2_3 && msg.y > y1_3 && msg.y < y2_3)
//					selectedButton = 1;
//				else if (msg.x > x1_2 && msg.x < x2_2 && msg.y > y1_2 && msg.y < y2_2)
//					selectedButton = 2;
//				else
//					selectedButton = -1; // 没有按钮被选中
//			}
//		}
//
//		// 绘制按钮，根据选中状态设置不同颜色
//		cleardevice();
//		putimage(0, 0, &img_mm);
//		setcolor(BLACK);
//		BeginBatchDraw();
//		if (selectedButton == 0)
//			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
//		else
//			setfillcolor(RGB(203, 249, 127)); // 默认颜色
//		fillrectangle(x1_1, y1_1, x2_1, y2_1);
//
//		if (selectedButton == 1)
//			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
//		else
//			setfillcolor(RGB(203, 249, 127)); // 默认颜色
//		fillrectangle(x1_3, y1_3, x2_3, y2_3);
//
//		if (selectedButton == 2)
//			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
//		else
//			setfillcolor(RGB(203, 249, 127)); // 默认颜色
//		fillrectangle(x1_2, y1_2, x2_2, y2_2);
//
//		setfillcolor(RGB(203, 249, 127));
//		settextstyle(40, 0, "微软雅黑");
//		setbkmode(TRANSPARENT);
//		settextcolor(BLACK);
//		outtextxy(140, 210, "音乐开关");
//		outtextxy(140, 310, "难度设置");//4
//		outtextxy(140, 410, "返回菜单");
//		settextcolor(RED);
//		settextstyle(100, 0, "微软雅黑");
//		outtextxy(130, 50, "设置");
//		EndBatchDraw();
//		Sleep(5);
//	}
//}

void Hair_item()
{
	if (game_level == 1)
		return;
	int count = 2 * game_level - 2;
	for (int i = 0; i < 8; ++i)
	{
		// 道具栏为空
		if (player_item[i] == 0)
		{
			player_item[i] = rand() % 5 + 1;
			Sleep(rand() % 100 + 1);
			--count;
			if (count == 0)
				break;
		}
	}
	count = 2 * game_level - 2;
	for (int i = 0; i < 8; ++i)
	{
		// 道具栏为空
		if (Machine_item[i] == 0)
		{
			Machine_item[i] = rand() % 5 + 1;
			Sleep(rand() % 100 + 1);
			--count;
			if (count == 0)
				break;
		}
	}
	lasttime_p = lasttime_m = false;
}

void PrintfRounds()
{
	char arrarr4[5];
	_stprintf_s(arrarr4, "%d", rounds);
	setbkmode(TRANSPARENT);
	settextstyle(20, 0, "楷体");
	outtextxy(450, 460, "第");
	outtextxy(472, 460, arrarr4);
	outtextxy(490, 460, "回合");
}












void STInit(ST* pst)
{
	// pst是指向栈结构体的指针，不可能为空，为空说明传参错误
	assert(pst);

	pst->a = NULL;
	pst->top = 0;
	pst->capacity = 0;
}

void STDestroy(ST* pst)
{
	assert(pst);

	free(pst->a);
	pst->a = NULL;
	pst->top = 0;
	pst->capacity = 0;
}

void STPush(ST* pst, STDataType x)
{
	assert(pst);

	if (pst->top == pst->capacity)
	{
		int newCapacity = pst->capacity == 0 ? 4 : 2 * pst->capacity;
		STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newCapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		pst->a = tmp;
		pst->capacity = newCapacity;
	}

	pst->a[pst->top] = x;
	++pst->top;
}

void STPop(ST* pst)
{
	assert(pst);
	// 为空不能删除
	assert(pst->top > 0);

	--pst->top;
}

STDataType STTop(ST* pst)
{
	assert(pst);
	// 存在元素才能找栈顶元素
	assert(pst->top > 0);

	return pst->a[pst->top - 1];
}

bool STEmpty(ST* pst)
{
	assert(pst);

	// 栈为空返回true，不为空返回false
	return pst->top == 0;
}

int STSize(ST* pst)
{
	assert(pst);

	return pst->top;
}








void print_SettingInterface()
{
	int mouseX = 0;
	int mouseY = 0;
	int selectedButton = -1; // 用于跟踪鼠标所在的按钮，默认为-1表示没有按钮被选中
	cleardevice();
	IMAGE img_mm;
	// 加载图片
	loadimage(&img_mm, "设置.jpg", 1024, 768);
	// 输出图片
	putimage(0, 0, &img_mm);
	// 第一个按钮坐标
	int x1_1 = 100;
	int y1_1 = 250;
	int x2_1 = 300;
	int y2_1 = 310;

	// 第二个按钮坐标
	int x1_2 = 100;
	int y1_2 = 375;
	int x2_2 = 300;
	int y2_2 = 435;

	// 第三个按钮坐标
	int x1_3 = 100;
	int y1_3 = 500;
	int x2_3 = 300;
	int y2_3 = 560;
	ExMessage msg = { 0 };
	while (true) {
		if (peekmessage(&msg, EX_MOUSE))
		{
			if (msg.message == WM_LBUTTONDOWN)
			{//	左键按下
				if (msg.x > 100 && msg.x < 300 && msg.y>250 && msg.y < 310)
				{
					MusicSwitch();
					if (Switch == true)
						MenuMusic(true);
					else if (Switch == false)
						MenuMusic(false);
				}
				else if (msg.x > 100 && msg.x < 300 && msg.y>375 && msg.y < 435)
					//DifficultySeeting();
					;
				else if (msg.x > 100 && msg.x < 300 && msg.y>500 && msg.y < 560)
				{
					//返回菜单
					picture = 1;
					return;
				}
			}
			else if (msg.message == WM_MOUSEMOVE)
			{ // 鼠标移动事件
					// 检查鼠标是否在按钮上
				if (msg.x > x1_1 && msg.x < x2_1 && msg.y > y1_1 && msg.y < y2_1)
					selectedButton = 0;
				else if (msg.x > x1_3 && msg.x < x2_3 && msg.y > y1_3 && msg.y < y2_3)
					selectedButton = 1;
				else if (msg.x > x1_2 && msg.x < x2_2 && msg.y > y1_2 && msg.y < y2_2)
					selectedButton = 2;
				else
					selectedButton = -1; // 没有按钮被选中
			}
		}

		// 绘制按钮，根据选中状态设置不同颜色
		cleardevice();
		putimage(0, 0, &img_mm);
		setcolor(BLACK);
		BeginBatchDraw();
		if (selectedButton == 0)
			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
		else
			setfillcolor(RGB(77, 77, 77)); // 默认颜色
		fillrectangle(x1_1, y1_1, x2_1, y2_1);

		if (selectedButton == 1)
			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
		else
			setfillcolor(RGB(77, 77, 77)); // 默认颜色
		fillrectangle(x1_3, y1_3, x2_3, y2_3);

		if (selectedButton == 2)
			setfillcolor(RGB(93, 107, 153)); // 选中时的颜色
		else
			setfillcolor(RGB(77, 77, 77)); // 默认颜色
		fillrectangle(x1_2, y1_2, x2_2, y2_2);

		setfillcolor(RGB(77, 77, 77));
		settextstyle(40, 0, "微软雅黑");
		setbkmode(TRANSPARENT);
		settextcolor(BLACK);
		outtextxy(140, 260, "音乐开关");
		outtextxy(140, 385, "敬请期待");//4
		outtextxy(140, 510, "返回菜单");
		settextcolor(RGB(130, 103, 105));
		settextstyle(100, 0, "微软雅黑");
		outtextxy(130, 50, "设置");
		EndBatchDraw();
		Sleep(5);
	}
}

typedef struct GameData {
	char dateTime[20]; // 日期时间字符串
	int money;         // 金钱
} GameData;
//用于比较两个GameData对象，用于排序
int compare(const void* a, const void* b)
{
	GameData* gameData1 = (GameData*)a;
	GameData* gameData2 = (GameData*)b;
	return  gameData2->money - gameData1->money;
}

//将日期转换成char数组
void updateGameDataDateTime(GameData* data) {
	time_t now = time(NULL);
	struct tm* tm_now = localtime(&now);
	strftime(data->dateTime, sizeof(data->dateTime), "%Y-%m-%d %H:%M", tm_now);
}

//看排行榜函数，在调用的时候打开文件读取数据，绘制排行榜
//www
void r_ranking_list()
{
	int fontSize = 20; // 可以调整这个值来改变字体大小
	int titleFontSize = fontSize + 10; // 标题字体稍大
	int headerFontSize = fontSize; // 表头字体大小
	int contentFontSize = fontSize; // 内容字体稍小
	int buttonFontSize = fontSize - 2; // 按钮字体大小

	int boo = 0;
	FILE* file = fopen("game_data.txt", "r");
	if (file == NULL)
	{
		printf("无法打开文件\n");
		return;
	}

	GameData data[100];
	int count = 0;

	while (fscanf(file, "时间: %[^,], 资产: %d\n", data[count].dateTime, &data[count].money) != EOF)
	{
		count++;
	}

	fclose(file);
	qsort(data, count, sizeof(GameData), compare);
	cleardevice();
	setbkcolor(RGB(77, 77, 77));
	setbkmode(TRANSPARENT); // 设置字体背景为透明
	MOUSEMSG msg;
	int yOffset = 0;
	IMAGE img_mm;
	while (1)
	{
		BeginBatchDraw();
		cleardevice();
		// 加载图片
		loadimage(&img_mm, "排行榜.png", 1024, 768);
		// 输出图片
		putimage(0, 0, &img_mm);
		// 设置标题样式
		settextstyle(titleFontSize, 0, _T("微软雅黑"));
		settextcolor(RGB(255, 255, 255));
		outtextxy(280, 10, _T("游戏排行榜"));

		// 设置表头样式
		settextstyle(headerFontSize, 0, _T("微软雅黑"));
		settextcolor(RGB(255, 255, 255));
		outtextxy(60, 60, _T("时间"));
		outtextxy(400, 60, _T("资产"));

		// 绘制表头下的分隔线
		line(0, 90, 800, 90);

		// 绘制返回按钮
		settextstyle(buttonFontSize, 0, _T("微软雅黑"));
		settextcolor(RGB(255, 255, 255));
		rectangle(650, 10, 780, 40);
		outtextxy(680, 15, _T("返回主菜单"));

		char buffer[80];
		settextstyle(contentFontSize, 0, _T("微软雅黑"));
		settextcolor(RGB(255, 255, 255));

		for (int i = 0; i < count; i++)
		{
			sprintf(buffer, "%s", data[i].dateTime);
			outtextxy(60, 100 + i * 30 - yOffset, buffer);

			sprintf(buffer, "%d", data[i].money);
			outtextxy(400, 100 + i * 30 - yOffset, buffer);
		}

		yOffset = max(yOffset, 0);
		yOffset = min(yOffset, max(0, count * 30 - 500));

		FlushBatchDraw();
		Sleep(10);
		EndBatchDraw();
		cleardevice();

		while (MouseHit())
		{
			msg = GetMouseMsg();
			switch (msg.uMsg) {
			case WM_MOUSEWHEEL:
				yOffset += (short)msg.wheel;
				break;
			case WM_LBUTTONDOWN:
				if (msg.x >= 650 && msg.x <= 780 && msg.y >= 10 && msg.y <= 40)
				{
					boo = 1;
					picture = 1;
					return;
				}
			}
		}
	}
}



// 修改后的w_ranking_list函数
void w_ranking_list(int money) {
	GameData data;
	updateGameDataDateTime(&data); // 获取当前时间并转换为字符串
	data.money = money; // 设置金钱

	FILE* file = fopen("game_data.txt", "a"); // 以追加模式打开文件，如果文件不存在则创建
	if (file == NULL) {
		printf("无法创建文件，存入数据失败\n");
		return;
	}

	// 写入记录
	fprintf(file, "时间: %s, 资产: %d\n", data.dateTime, data.money);

	fclose(file); // 关闭文件
}


/// //////////////////////////////////////////////////////////////
int  AI_operate_plus() {			//抽烟
	srand(time(NULL));	//通过获取当前时间作为生成随机数的种子，保证每次生成的随机数不一样
	use = 0;
	c = STTop(&s);
	//ai使用刀：
	char arr13[] = "对家使用  刀  本次开火实弹伤害+1！";
	//ai使用酒：
	char arr14_1[] = "对家使用  啤酒  卸掉一发实弹！";
	char arr14_2[] = "对家使用  啤酒  卸掉一发空弹！";
	//ai使用烟：
	char arr15[] = "对家使用  香烟  回复一点血！";
	//ai使用手铐：
	char arr16[] = "对家使用  手铐  你行动受限一回合！";
	//ai使用放大镜：
	char arr17[] = "对家使用  放大镜  窥探到本发子弹的虚实！";


	//烟
	while (Machine_health < 2 * game_level) {
		for (int i = 0; i < 8; i++) {
			if (Machine_item[i] == 2) {

				ai_SmokeCG();//抽烟动画

				Machine_item[i] = 0;//烟减一

				Machine_health += 1;//生命加一
				use = 1;
				print_GameInterface();
				messagerefresh(arr15);//更新信息
				Sleep(1500);
				break;
			}
		}
		break;
	}
	//放大镜,能用就用，全用了也行
	if (1) {

		for (int i = 0; i < 8; i++) {
			if (Machine_item[i] == 5) {

				Machine_item[i] = 0;	//放大镜减一

				ai_Using_magnifying_glass();//调用ai使用放大镜动画

				int e;//用于访问栈顶元素的指针
				fang_da = 1;
				if (STTop(&s)) {			//调用栈顶元素
					c = 1.0;
				}
				else {
					c = 0.0;
				}
				use = 1;
				print_GameInterface();
				messagerefresh(arr17);//更新信息
				Sleep(1500);
				break;
			}
		}
	}
	//酒
	if (c == 0) {
		if (1) {
			for (int i = 0; i < 8; i++) {
				if (Machine_item[i] == 4) {

					Machine_item[i] = 0;//酒减一

					int p;//用于访问栈顶元素的指针

					//bool leave = 
					if (STTop(&s))
						--red_bullet;
					else
						--black_bullet;
					STPop(&s);//弹栈
					use = 1;
					ai_drinkingCG();//喝酒动画
					Sleep(1500);
					break;
				}
			}
		}
	}

	//刀
	if (useknife == 0)
	{
		if (c == 1) {

			for (int i = 0; i < 8; i++) {
				if (Machine_item[i] == 1) {

					Machine_item[i] = 0;//刀减一

					ai_UsingAKnifeCG();//刀动画

					useknife = 1;//标记使用了刀
					use = 1;
					print_GameInterface();
					messagerefresh(arr13);//更新信息
					Sleep(1500);
					break;
				}
			}
		}
	}


	//手铐
	if (usehandcuffs == 0)
	{
		if (red_bullet >= 2 && c > 0.6) {
			int randnumber = rand() % 2;//生成范围在[0,10]内的随机数

			if (randnumber) {

				for (int i = 0; i < 8; i++) {
					if (Machine_item[i] == 3) {

						Machine_item[i] = 0;//手铐减一

						ai_UseHandcuffsCG();//手铐动画

						usehandcuffs = 1;//标记使用了手铐
						use = 1;
						print_GameInterface();
						messagerefresh(arr16);//更新信息
						Sleep(1500);
						break;
					}
				}
			}
		}
	}



	if (useknife == 1 && usehandcuffs == 1) {
		return 4;
	}
	else if (usehandcuffs == 1) {
		return 3;
	}
	else if (useknife == 1) {
		return 2;
	}
	else {
		return 1;
	}
}


void AI_property_plus() {
	banker = 1;//坐庄人变量，玩家为1、ai为0
	c = STTop(&s);
	int b = 0;
	useknife = 0;
	usehandcuffs = 0;//使用刀和使用手铐的标志数
	fang_da = 0;
	while (game_level != 1)
	{
		b = AI_operate_plus();//调用函数，判断使用道具
		if (use == 0)
			break;
	}
	int zi_dan = STTop(&s);//假设1是红，0是黑,拿子弹，并退栈
	STPop(&s);
	printf("%lf\n", c);
	int a;
	if (c > 0.4999)
	{
		if (b == 2 || b == 4) {											//用了刀
			if (zi_dan == 1) {
				// 播放对面向玩家开火并中弹的动画
				MSPW();
				char message[] = "对家开火！本发子弹为实弹，对你造成2点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Player_health -= 2;
			}
			if (b == 3 || b == 4)
				banker = 0;
			print_GameInterface();
			return;
		}
		else {									//用了手铐
			if (zi_dan == 1) {//红子弹
				// 播放对面向玩家开火并中弹的动画
				MSPW();
				char message[] = "对家开火！本发子弹为实弹，对你造成1点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Player_health -= 1;
			}
			else {
				MSPF();
				char message[] = "对家开火！本发子弹为虚弹，对你造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
			}
			if (usehandcuffs)
				banker = 0, usehandcuffs = 0;
			print_GameInterface();
			return;
		}
	}
	else
	{
		if (b == 2 || b == 4)
		{
			if (zi_dan == 1) {
				// 播放对面向自己开枪并中弹的动画
				MSMW();
				char message[] = "对家开火！本发子弹为实弹，对自己造成2点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Machine_health -= 2;
			}
			else {
				MSMF();
				char message[] = "对家开火！本发子弹为虚弹，对你造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
				banker = 0;
			}
			if (usehandcuffs && banker == 1)
				banker = 0, usehandcuffs = 0;
			print_GameInterface();
			return;
		}
		else {
			if (zi_dan == 1) {
				// 播放对面向自己开枪并中弹的动画
				MSMW();
				char message[] = "对家开火！本发子弹为实弹，对自己造成1点伤害！";
				--red_bullet;
				print_GameInterface();
				messagerefresh(message);
				Machine_health--;
			}
			else {
				MSMF();
				char message[] = "对家开火！本发子弹为虚弹，对你造成0点伤害！";
				--black_bullet;
				print_GameInterface();
				messagerefresh(message);
				banker = 0;
			}
			if (usehandcuffs && banker == 1)
				banker = 0, usehandcuffs = 0;
			print_GameInterface();
			return;
		}
	}
}






void PlaySoundEffect(int n)
{
	switch (n) {
	case 1:
		mciSendString("open 刀子.MP3 alias bgm1", NULL, 0, NULL);
		mciSendStringA("play bgm1", NULL, 0, NULL);
		Sound[0] = 1;
		break;
	case 2:
		mciSendString("open 抽烟_1.MP3 alias bgm2", NULL, 0, NULL);
		mciSendStringA("play bgm2", NULL, 0, NULL);
		Sound[1] = 1;
		break;
	case 3:
		mciSendString("open 手铐.MP3 alias bgm3", NULL, 0, NULL);
		mciSendStringA("play bgm3", NULL, 0, NULL);
		Sound[2] = 1;
		break;
	case 4:
		mciSendString("open 喝酒.MP3 alias bgm4", NULL, 0, NULL);
		mciSendStringA("play bgm4", NULL, 0, NULL);
		Sound[3] = 1;
		break;
	case 5:
		mciSendString("open 放大镜.MP3 alias bgm5", NULL, 0, NULL);
		mciSendStringA("play bgm5", NULL, 0, NULL);
		Sound[4] = 1;
		break;
	case 6://开枪然鹅是虚弹
		mciSendString("open 真正的点击声.MP3 alias bgm6", NULL, 0, NULL);
		mciSendStringA("play bgm6", NULL, 0, NULL);
		Sound[5] = 1;
		break;
	case 7:
		mciSendString("open 玩家中弹.MP3 alias bgm7", NULL, 0, NULL);
		mciSendStringA("play bgm7", NULL, 0, NULL);
		Sound[6] = 1;
		break;
	case 8:
		mciSendString("open 恶魔中弹.MP3 alias bgm8", NULL, 0, NULL);
		mciSendStringA("play bgm8", NULL, 0, NULL);
		Sound[7] = 1;
		break;

	}
}


void Close_The_Sound() {
	for (int i = 0; i < 8; i++) {
		if (Sound[i] == 1) {
			switch (i + 1) {
			case 1:
				mciSendStringA("close bgm1", NULL, 0, NULL);
				break;
			case 2:
				mciSendStringA("close bgm2", NULL, 0, NULL);
				break;
			case 3:
				mciSendStringA("close bgm3", NULL, 0, NULL);
				break;
			case 4:
				mciSendStringA("close bgm4", NULL, 0, NULL);
				break;
			case 5:
				mciSendStringA("close bgm5", NULL, 0, NULL);
				break;
			case 6:
				mciSendStringA("close bgm6", NULL, 0, NULL);
				break;
			case 7:
				mciSendStringA("close bgm7", NULL, 0, NULL);
				break;
			case 8:
				mciSendStringA("close bgm8", NULL, 0, NULL);
				break;
			}
		}
	}
}